
package Demo25;

import java.io.File;
import java.util.Scanner;

public class Demo25 {
    //记录文件是否存在
    public static boolean count = true;

    public static void main(String[] args) {
          while(true) {
              // 每次查找前重置 count 变量
              count = true;
              //用户输入要查询的文件名
              Scanner scanner = new Scanner(System.in);
              System.out.println("此程序用来进行文件的查找和删除");
              System.out.println("温馨提示，输入的目录要符合d: 或者 d:/User/...的格式");
              System.out.println("请输入要查询的目录: ");
              String dir = scanner.next();
              scanner.nextLine();
              System.out.println("请输入要查询的文件名(文件名可以是部分名称): ");
              String filename = scanner.next();
              scanner.nextLine();

              //判断目录是否存在
              File rootFile = new File(dir);
              if(!rootFile.isDirectory()) {
                  System.out.println("目录不存在!");
                  System.out.println();
                  continue;
              }

              //进行搜索，递归遍历目录中所有的文件和子目录
              scanDir(rootFile,filename);

              if(count == true) {
                  System.out.println("文件不存在，或者文件名输入错误！");
              }

              System.out.println("输入 1 继续查找，输入 0 退出程序");

              int a = 0;
              while(true) {
                  if(scanner.hasNextInt()) {
                      a = scanner.nextInt();
                      if(a == 1) {
                          break;
                      }else if(a == 0) {
                          return;
                      }else {
                          System.out.println("输入的数字无效，请重新输入: ");
                          // 除去无效输入的内容
                          scanner.nextLine();
                      }
                  }else {
                      System.out.println("输入错误，请输入数字: ");
                      //除去无效输入的内容
                      scanner.nextLine();
                  }
              }
          }
       }

    private static void scanDir(File rootFile, String filename) {
        //列出 rootFile 中的内容
        File[] files = rootFile.listFiles();
        if(files == null) {
            //空目录
            return;
        }

        //遍历 files 数组，判断每个元素的类型
        for (File file : files) {
            if(file.isDirectory()) {
                //是一个目录，递归调用 scanDir 方法.
                scanDir(file,filename);
            }else if(file.isFile()) {
                //是一个文件，判断文件名是否匹配。
                if(file.getName().contains(filename)) {
                    tryDelete(file);
                    count = false;
                }
            }
        }
    }

    private static void tryDelete(File file) {
        System.out.println("已找到该文件，文件路径为：" + file.getAbsolutePath());
        System.out.println("是否删除该文件(Y/N)");
        Scanner scanner = new Scanner(System.in);
        String choice = scanner.next();
        if(choice.equals("Y") || choice.equals("y")) {
            file.delete();
            System.out.println("删除成功！");
        }
    }
}